package com.monkeyboy.sort;

import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;

/**
 * 把数组排成最小的数
 * 输入一个正整数数组，把数组里所有数字拼接起来排成一个数，打印能拼接出的所有数字中最小的一个。
 * 例如输入数组 {3，32，321}，则打印出这三个数字能排成的最小数字为 321323。
 * 解题思路：
 * 典型的冒泡排序，主要比较S1+S2>S2+S1的话，那么就交换S2和S1的值
 *
 * @Author Gavin
 * @date 2021.04.09 09:16
 */
public class Sort02 {
    //第一种方法
    public static String solution(int[] nums) {
        if (nums.length == 0) {
            return "";
        }
        for (int i = 0; i < nums.length; i++) {
            int temp = nums[i];
            int j = i + 1;
            while (j < nums.length) {
                if (Integer.parseInt(nums[j] + "" + temp) < Integer.parseInt(temp + "" + nums[j])) {
                    nums[i] = nums[j];
                    nums[j] = temp;
                    temp = nums[i];//这一步比较关键,数组里面的内容是通过值传递的
                }
                j++;
            }
        }
        StringBuffer str = new StringBuffer();
        for (int pre : nums) {
            str.append(pre);
        }
        return str.toString();
    }

    //利用Arrays.sort对里面的元素进行排序
    public String PrintMinNumber(int[] numbers) {
        if (numbers == null || numbers.length == 0)
            return "";
        int n = numbers.length;
        String[] nums = new String[n];
        for (int i = 0; i < n; i++)//注意，sort里面的compareTo排序只能针对对象进行排序
            nums[i] = numbers[i] + "";
        Arrays.sort(nums, (s1, s2) -> (s1 + s2).compareTo(s2 + s1));
        String ret = "";
        for (String str : nums)
            ret += str;
        return ret;
    }

    public static void main(String[] args) {

    }
}
